home *** CD-ROM | disk | FTP | other *** search
/ Aminet 51 / Aminet 51 (2002)(GTI - Schatztruhe)[!][Oct 2002].iso / Aminet / gfx / fract / FlashMandelWOS.lha / FlashMandel / Developer / Modules / Mandeln68K.S < prev    next >
Encoding:
Text File  |  2002-08-02  |  2.0 KB  |  73 lines

  1. ***********************************************************************************
  2. **            Written by Dino Papararo            08-December-2001
  3. **
  4. **  FUNCTION
  5. **
  6. **    Mandeln68K -- perform Z = (Z^(2^n)) + C  (1 <= n <= 11)
  7. **
  8. **  SYNOPSIS
  9. **
  10. **    WORD Mandeln68K (ULONG Iterations,ULONG Power,double Cre,double Cim)
  11. **
  12. **
  13. **  DESCRIPTION
  14. **
  15. **  This function tests if a point belongs or not at Mandelbrot set
  16. **
  17. **  Optimized for pipelines of 68882+ coprocessors
  18. **
  19. **  NOTICE: ALL VARIABLES ARE INTO REGISTERS FOR FULL SPEEEED
  20. **
  21. **  d0:Iterations d1:Power
  22. **
  23. **  fp0:Cre fp1:Cim fp2:Zr fp3:Zi fp4:Zr2 fp5:Zi2/Dist fp6:MaxDist fp7:Not used :-)
  24. ***********************************************************************************
  25.  
  26. *        MACHINE  68060
  27.  
  28.         XDEF  _Mandeln68K
  29.  
  30.         section data
  31.  
  32. Radius  dc.x  4.0            * Store Radius in data mem
  33. Power   dc.w  0              * Store Power in data mem
  34.  
  35.         section code
  36.  
  37. _Mandeln68K:
  38.  
  39.         fmove.x fp1,fp3      * Zi = Cim
  40.         fmove.x fp0,fp2      * Zr = Cre
  41.         move.w  d1,Power     * Save Power from d1 to mem
  42.         fmove.x Radius,fp6   * Save Radius from mem to fp6
  43.         bra.w   PowerLoop    * Go to PowerLoop
  44.  
  45. Start:
  46.         move.w  Power,d1     * Load Power from data mem to d1
  47.  
  48. PowerLoop:
  49.  
  50.         fmove.x fp3,fp5      * zi2   = zi
  51.         fmul.x  fp2,fp3      * zi    = zr * zi
  52.         fmul.x  fp2,fp2      * zr    = zr * zr
  53.         fmul.x  fp5,fp5      * zi2   = zi * zi
  54.         fmove.x fp2,fp4      * zr2   = zr
  55.         fadd.x  fp3,fp3      * zi   += zi
  56.         fsub.x  fp5,fp2      * zr   -= zi2
  57.         dbra.w  d1,PowerLoop * if --Power != -1 go to PowerLoop
  58.  
  59.         fadd.x  fp4,fp5      * Dist = zr2 + zi2
  60.         fcmp.x  fp6,fp5      * Compare MaxDist & Dist
  61.         fbgt.w  End          * if Dist > MaxDist then goto End
  62.  
  63.         fadd.x  fp1,fp3      * zi   += Cim
  64.         fadd.x  fp0,fp2      * zr   += Cre
  65.         dbra.w  d0,Start     * if --Iterations != -1 go to Start
  66.         clr.w   d0
  67.  
  68. End:
  69.  
  70.         rts                  * return Iterations
  71.  
  72.         end
  73.